package com.lich.service;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lich.dao.DepartmentMapper;
import com.lich.dao.ProductMapper;
import com.lich.dao.UserProductMapper;
import com.lich.entity.AppFunction;
import com.lich.entity.Product;
import com.lich.entity.UserProduct;
import com.lich.entity.vo.ProductResult;

@Service
public class ProductService {
	@Resource
	ProductMapper productMapper;

	@Resource
	DepartmentMapper departmentMapper;

	@Resource
	UserProductMapper userProductMapper;

	@Resource
	AppFunctionService appFunctionService;

	/**
	 * @description 添加
	 * @date 2016年8月31日
	 * @author lich-thinkpad
	 * @param product
	 * @return
	 */
	@Transactional
	public int add(Product product) {
		int result =0;
		result = productMapper.insert(product);
		
		AppFunction appFunction = new AppFunction();
		appFunction.setUuid(UUID.randomUUID().toString());
		appFunction.setCreateTime(new Date());
		appFunction.setProductId(product.getId());
		appFunction.setParentId(1);
		appFunction.setName(product.getName());
		result = appFunctionService.add(appFunction);
		return result;
	}

	/**
	 * @description 更新
	 * @date 2016年8月31日
	 * @author lich-thinkpad
	 * @param product
	 */
	public int updateById(Product product) {
		return productMapper.updateById(product);
	}

	/**
	 * @description 删除
	 * @date 2016年9月6日
	 * @author lich-thinkpad
	 * @param id
	 * @return
	 */
	public int deleteById(int id) {
		return productMapper.deleteById(id);
	}

	/**
	 * @description 获取一页
	 * @date 2016年8月31日
	 * @author lich-thinkpad
	 * @param Page<Object>
	 * @return
	 * @throws InvocationTargetException
	 * @throws IllegalAccessException
	 */
	public PageInfo<ProductResult> getPage(Integer pageNum){
		PageHelper.startPage(pageNum, 10);
		return new PageInfo<>(productMapper.selectPage());
	}

	/**
	 * @description 获得所有
	 * @date 2016年9月7日
	 * @author lich
	 * @return
	 */
	public List<Product> getAll() {
		return productMapper.selectAll();
	}

	/**
	 * @description 通过用户id查
	 * @date 2016年9月8日
	 * @author lich
	 * @return
	 * @throws InvocationTargetException
	 * @throws IllegalAccessException
	 */
	public List<Product> getByUserId(int userId) {
		List<Product> products = new ArrayList<>();
		List<UserProduct> userProducts = userProductMapper.selectByUserId(userId);
		for (UserProduct userProduct : userProducts) {
			Product product = productMapper.selectById(userProduct.getProductId());
			products.add(product);
		}
		return products;
	}

	/**
	 * @description 通过名称查询
	 * @date 2016年9月9日
	 * @author lich
	 * @param name
	 * @return
	 */
	public Product getByName(String name) {
		Product product = new Product();
		product.setName(name);
		return productMapper.selectByName(product);
	}
	/**
	 * @description 根据名称查找，除了制定id
	 * @date 2016年9月13日
	 * @author lich
	 * @param name
	 * @param id
	 * @return
	 */
	public Product getByName(String name, int id) {
		Product product = new Product();
		product.setId(id);
		product.setName(name);
		return productMapper.selectByName(product);
	}
	
	/**
	 * @description 根据id查找
	 * @date 2016年9月13日
	 * @author lich
	 * @param id
	 * @return
	 */
	public Product selectById(int id) {
		return productMapper.selectById(id);
	}
}
